home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / mail / pine3.96.tar.gz / pine3.96.tar / pine3.96 / imap / ANSI / c-client / drivers.cmd < prev    next >
OS/2 REXX Batch file  |  1996-03-15  |  7KB  |  162 lines

  1. /* rexx */
  2. /*
  3.  * This is slightly different from the method employed by the
  4.  * standard c-client library linkage.
  5.  *
  6.  * Instead of generating a "linkage.c" which links the mail
  7.  * drivers by reference to their definitions in the c-client
  8.  * library, we instead call the os2_cclient_link() function
  9.  * which does that on our behalf. This way, the drivers
  10.  * themselves remain internal to the library and there is
  11.  * no need to worry about having to export the data from
  12.  * the c-client .dll.
  13.  *
  14.  * In the linkage.[ch] files, we simply specify a prototype
  15.  * and generate a call to the exported init function.
  16.  */
  17. '@echo off'
  18. /* erase old driver linkage */
  19. 'rm -f linkage.* os2_link.*'
  20. today=date('N')
  21. parse arg default args
  22. n=words(args)
  23. h_file='linkage.h'
  24. c_file='os2_link.c'
  25. call stream h_file, 'C', 'open write'
  26. call stream c_file, 'C', 'open write'
  27. call lineout h_file, '/* c-client drivers for OS/2 -' today '*/'
  28. call lineout h_file, ''
  29. call lineout h_file, '#define DEFAULTPROTO' default'proto'
  30. call lineout h_file, 'extern MAILSTREAM' default'proto;'
  31. call lineout h_file, ''
  32. call lineout h_file, 'struct mm_callbacks {'
  33. call lineout h_file, '  void (*searched)(MAILSTREAM*s,long n);'
  34. call lineout h_file, '  void (*exists)(MAILSTREAM*s,long n);'
  35. call lineout h_file, '  void (*expunged)(MAILSTREAM*s,long n);'
  36. call lineout h_file, '  void (*flags)(MAILSTREAM*s,long n);'
  37. call lineout h_file, '  void (*mailbox)(char *s);'
  38. call lineout h_file, '  void (*bboard)(char *s);'
  39. call lineout h_file, '  void (*log)(char *s, long errflg);'
  40. call lineout h_file, '  void (*dlog)(char *s);'
  41. call lineout h_file, '  void (*login)(char *host,char *user,char *pwd,long trial);'
  42. call lineout h_file, '  void (*notify)(MAILSTREAM *s,char *m,long e);'
  43. call lineout h_file, '  void (*critical)(MAILSTREAM *s);'
  44. call lineout h_file, '  void (*nocritical)(MAILSTREAM *s);'
  45. call lineout h_file, '  long (*diskerror)(MAILSTREAM *s,long err,long serious);'
  46. call lineout h_file, '  void (*fatal)(char *s);'
  47. call lineout h_file, '};'
  48. call lineout h_file, ''
  49. call lineout h_file, 'extern void os2_cclient_link(struct mm_callbacks *mmcb);'
  50. call lineout c_file, ''
  51. call lineout c_file, '  /* link in c-client drivers for OS/2 -' today '*/'
  52. call lineout c_file, ''
  53. call lineout c_file, '#include <stdio.h>'
  54. call lineout c_file, '#include "mail.h" /* this includes linkage.h */'
  55. call lineout c_file, ''
  56. /*
  57.  * Drop in the mm_* callbacks
  58.  */
  59. call lineout c_file, 'static struct mm_callbacks MM;'
  60. call lineout c_file, ''
  61. call lineout c_file, '/* Redirect internal calls to program callbacks */'
  62. call lineout c_file, ''
  63. call lineout c_file, '#ifdef OMF /* only used in an omf .dll */'
  64. call lineout c_file, 'void mm_searched(MAILSTREAM*s,long n)'
  65. call lineout c_file, '{'
  66. call lineout c_file, '  if (MM.searched) MM.searched(s,n);'
  67. call lineout c_file, '}'
  68. call lineout c_file, 'void mm_exists(MAILSTREAM*s,long n)'
  69. call lineout c_file, '{'
  70. call lineout c_file, '  if (MM.exists) MM.exists(s,n);'
  71. call lineout c_file, '}'
  72. call lineout c_file, 'void mm_expunged(MAILSTREAM*s,long n)'
  73. call lineout c_file, '{'
  74. call lineout c_file, '  if (MM.expunged) MM.expunged(s,n);'
  75. call lineout c_file, '}'
  76. call lineout c_file, 'void mm_flags(MAILSTREAM*s,long n)'
  77. call lineout c_file, '{'
  78. call lineout c_file, '  if (MM.flags) MM.flags(s,n);'
  79. call lineout c_file, '}'
  80. call lineout c_file, 'void mm_mailbox(char *s)'
  81. call lineout c_file, '{'
  82. call lineout c_file, '  if (MM.mailbox) MM.mailbox(s);'
  83. call lineout c_file, '}'
  84. call lineout c_file, 'void mm_bboard(char *s)'
  85. call lineout c_file, '{'
  86. call lineout c_file, '  if (MM.bboard) MM.bboard(s);'
  87. call lineout c_file, '}'
  88. call lineout c_file, 'void mm_log(char *s,long e)'
  89. call lineout c_file, '{'
  90. call lineout c_file, '  if (MM.log) MM.log(s, e);'
  91. call lineout c_file, '}'
  92. call lineout c_file, 'void mm_dlog(char *s)'
  93. call lineout c_file, '{'
  94. call lineout c_file, '  if (MM.dlog) MM.dlog(s);'
  95. call lineout c_file, '}'
  96. call lineout c_file, 'void mm_login(char *host,char *user,char *pwd,long trial)'
  97. call lineout c_file, '{'
  98. call lineout c_file, '  if (MM.login) MM.login(host,user,pwd,trial);'
  99. call lineout c_file, '}'
  100. call lineout c_file, 'void mm_notify(MAILSTREAM *s,char *m,long e)'
  101. call lineout c_file, '{'
  102. call lineout c_file, '  if (MM.notify) MM.notify(s, m, e);'
  103. call lineout c_file, '}'
  104. call lineout c_file, 'void mm_critical(MAILSTREAM *s)'
  105. call lineout c_file, '{'
  106. call lineout c_file, '  if (MM.critical) MM.critical(s);'
  107. call lineout c_file, '}'
  108. call lineout c_file, 'void mm_nocritical(MAILSTREAM *s)'
  109. call lineout c_file, '{'
  110. call lineout c_file, '  if (MM.nocritical) MM.nocritical(s);'
  111. call lineout c_file, '}'
  112. call lineout c_file, 'long mm_diskerror(MAILSTREAM *s,long err,long serious)'
  113. call lineout c_file, '{'
  114. call lineout c_file, '  return (MM.diskerror) ? MM.diskerror(s,err,serious) : 0;'
  115. call lineout c_file, '}'
  116. call lineout c_file, 'void mm_fatal(char *s)'
  117. call lineout c_file, '{'
  118. call lineout c_file, '  if (MM.fatal) MM.fatal(s);'
  119. call lineout c_file, '}'
  120. call lineout c_file, '#endif'
  121. call lineout c_file, ''
  122. call lineout c_file, 'void os2_cclient_link(struct mm_callbacks *cb)'
  123. call lineout c_file, '{'
  124. call lineout c_file, '  /* init callbacks */'
  125. call lineout c_file, '  MM = *cb;'
  126. call lineout c_file, ''
  127. do i=1 to n
  128.   arg=word(args,i)
  129.   call lineout h_file, 'extern DRIVER '||arg||'driver;'
  130.   call lineout c_file, '  mail_link(&'arg'driver);    /* link in' arg 'driver */'
  131.   end
  132. call lineout c_file, '}'
  133. call stream h_file, 'C', 'close'
  134. call stream c_file, 'C', 'close'
  135. /*
  136.  * Now, let's generate our linkage.* files for the client apps
  137.  */
  138. c_file='linkage.c'
  139. call stream c_file, 'C', 'open write'
  140. call lineout c_file, '  /* link in c-client drivers for OS/2 -' today '*/'
  141. call lineout c_file, '  {'
  142. call lineout c_file, '    static struct mm_callbacks os2callbacks = {'
  143. call lineout c_file, '      mm_searched,'
  144. call lineout c_file, '      mm_exists,'
  145. call lineout c_file, '      mm_expunged,'
  146. call lineout c_file, '      mm_flags,'
  147. call lineout c_file, '      mm_mailbox,'
  148. call lineout c_file, '      mm_bboard,'
  149. call lineout c_file, '      mm_log,'
  150. call lineout c_file, '      mm_dlog,'
  151. call lineout c_file, '      mm_login,'
  152. call lineout c_file, '      mm_notify,'
  153. call lineout c_file, '      mm_critical,'
  154. call lineout c_file, '      mm_nocritical,'
  155. call lineout c_file, '      mm_diskerror,'
  156. call lineout c_file, '      mm_fatal'
  157. call lineout c_file, '    };'
  158. call lineout c_file, '    os2_cclient_link(&os2callbacks);'
  159. call lineout c_file, '  }'
  160. call stream c_file, 'C', 'close'
  161. exit 0
  162.